
const {createServer}=require('http')
const express=require('express'),
    app=express(),
    bodyParser=require('body-parser'),
    port=5431, 
    fn=require('./router/index'),
    upload=require('./router/files'),
    cors=require('cors'),
    jwt=require('./dao/jwt'),
    parseJwt=require('express-jwt'),
    socket=require("./dao/socket"),
    robotApi=require("./router/robot")
    adminApi=require("./router/admin")

// 请求是express处理 但是服务使用server监听
const server=createServer(app)
    
//使用cors解决跨域问题
app.use(cors())
// 使用插件,会自动的将请求数据转为json格式
app.use(bodyParser.json())

// 设置静态目录 资源不会发生改变的目录 静态文件可也通过设置max-age设置强缓存 cache-control
app.use(express.static(__dirname+'/data',{maxAge:2592000000}))
let i=0;
app.use("*",(req,res,next)=>{
    i++;
    // console.log("中间件函数 执行了"+i+'次');
    next()
})
// 使用socket 传入服务器对象 不是express对象 
socket(server)



//登录状态下的请求 都需要进行token验证
// 使用expressjwt,对指定'Bearer '+token 做出检查。使用jwt解密方法
//暂时关闭token验证
app.use(
    parseJwt.expressjwt({
        secret: 'yike31',
        algorithms: ['HS256']
    })// 登录页 注册，邮箱,修改密码 无需校验token
      .unless({ path: ['/signup/add','/admin/registadmin','/email/validaCode','/gen','/admin/isadmin','/signin/match','/email','/signup/judge','/signin/testtoken','/user/forget'] }) 
       
)

//使用router 实际上没有用router
//使用引入方法传入app实例
fn(app)

//机器人对话api
robotApi(app)
adminApi(app)

// 使用上传文件路由
upload(app)

// console.log(parseJwt.expressjwt,'parseJwt');




//拦截器？？请求结果的数字设置页面失败显示
app.use((req,res,next)=>{
    let err=new Error("Not found!")
    err.status=404
    next(err);
})

app.use((req,res,next)=>{
    let err=new Error("505")
    err.status(err.status||500)
    res.send(err.message)
})

//监听端口
server.listen(port,()=>{
    console.log('当前访问端口',port);
})

// 安装修改代码自动重启服务器,npm install -g nodemon
//之后使用nodemon app.js 执行代码,实现自动重启服务器